The present application relates to the field of image filters and, more specifically, to a recursive filter that recursively applies one or more pre-computed filter kernels selected from a database to individual regions of an image, thereby achieving a desired variance reduction at those individual regions.
Conventional image filtering techniques require the calculation of the filter parameters for the data specific to each individual pixel used to display an image, on the fly. For example, filters often employ a kernel, also referred to as a mask, which is a square matrix of values called kernel elements. The kernel is figuratively overlaid onto image data for a similarly-sized neighborhood of pixels used to display a portion of the image, including the pixel currently being analyzed. Performing a mathematical convolution of the kernel with the data for the neighborhood of pixels overlaid by the kernel results in a filtered value of the pixel currently being analyzed. This process is repeated to filter the image data for each individual pixel that is to form a portion of the filtered image.
Calculations of the kernel dimension and the values of the kernel elements on the fly have conventionally been performed specifically for each individual pixel, during the analysis of each individual pixel to determine the extent of filtration to be applied. The strength of a filter, or the extent to which noise or another artifact is to be filtered, depends in large part to the dimension of the filter's kernel. Pixel data that requires a relatively-strong filter to limit the presence of a substantial artifact is conventionally filtered using large kernels having many rows and columns. However, the number of computations for a given pixel increases as the square of the kernel's size. Thus, use of a large kernel for pixels requiring a relatively-strong filter involves many complex calculations, which consumes significant computer processing resources, making conventional filtering techniques slow and impractical for very noisy images. As a result, the extent of filtering that can be performed according to such conventional techniques is often limited by a maximum permissible size of the kernel that can be utilized. Such computationally-demanding filtering techniques are also often not suitable to be performed utilizing a parallel computing architecture.
Recursive filters were developed in an effort to at least partially address the computationally-intensive nature of conventional filters. Recursive filters utilize a first filtered output as an input to another filter. However, conventional recursive filters require the use of both causal filters and anti-causal filters, with the result of each filter being combined. As a result, both forward and backward recursions are necessary, and large amounts of computer memory are required to store both conversion results that are to be combined in the final result.